.TH std::begin(std::valarray) 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::begin(std::valarray) \- std::begin(std::valarray)

.SH Synopsis
   template< class T >                            \fB(1)\fP \fI(since C++11)\fP
   /* see below */ begin( valarray<T>& v );
   template< class T >                            \fB(2)\fP \fI(since C++11)\fP
   /* see below */ begin( const valarray<T>& v );

   The overload of std::begin for valarray returns an iterator of unspecified type
   referring to the first element in the numeric array.

   1) The return type must
     * meet the requirements of mutable LegacyRandomAccessIterator,

     * model contiguous_iterator,   \fI(since C++20)\fP

     * have a member type value_type, which is T, and
     * have a member type reference, which is T&.
   2) The return type must
     * meet the requirements of constant LegacyRandomAccessIterator,

     * model contiguous_iterator,   \fI(since C++20)\fP

     * have a member type value_type, which is T, and
     * have a member type reference, which is const T&.

   The iterator returned from this function is invalidated when the member function
   resize() is called on v or when the lifetime of v ends, whichever comes first.

.SH Parameters

   v - a numeric array

.SH Return value

   Iterator to the first value in the numeric array.

.SH Exceptions

   May throw implementation-defined exceptions.

.SH Notes

   Unlike other functions that take std::valarray arguments, begin() cannot accept the
   replacement types (such as the types produced by expression templates) that may be
   returned from expressions involving valarrays: std::begin(v1 + v2) is not portable,
   std::begin(std::valarray<T>(v1 + v2)) has to be used instead.

   The intent of this function is to allow range for loops to work with valarrays, not
   to provide container semantics.

.SH Example


// Run this code

 #include <algorithm>
 #include <iostream>
 #include <valarray>

 void show(const std::valarray<int>& v)
 {
     std::for_each(std::begin(v), std::end(v), [](int c)
     {
         std::cout << c << ' ';
     });
     std::cout << '\\n';
 };

 int main()
 {
     const std::valarray<int> x{47, 70, 37, 52, 90, 23, 17, 33, 22, 16, 21, 4};
     const std::valarray<int> y{25, 31, 71, 56, 21, 21, 15, 34, 21, 27, 12, 6};

     show(x);
     show(y);

     const std::valarray<int> z{x + y};

     for (char c : z)
         std::cout << c;
 }

.SH Output:

 47 70 37 52 90 23 17 33 22 16 21 4
 25 31 71 56 21 21 15 34 21 27 12 6
 Hello, C++!

   Defect reports

   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.

      DR    Applied to              Behavior as published              Correct behavior
                       1. begin() was required to support replacement
   LWG 2058 C++11      types                                           1. not required
                       2. it was unspecified when the returned         2. specified
                       iterators will be invalidated

.SH See also

   std::end(std::valarray) specializes std::end
   \fI(C++11)\fP                 \fI(function template)\fP
